package adfc2.entities;

import adfc2.core.Creature;
import adfc2.core.Item;
import adfc2.core.World;

import java.util.LinkedList;
import java.util.List;

/**
 * Абстрактная мастерская (может содержать предметы и работника)
 */
public abstract class Workshop extends Building {

    public final int entranceDxy;
    public List<Item> items = new LinkedList<Item>();
    public Creature worker;

    public void removeItem(Item item) {
        items.remove(item);
        item.owner = null;
    }

    public boolean hasItem(Item item) {
        return items.contains(item);
    }

    public void addItem(Item item) {
        assert item.owner == null;
        items.add(item);
        item.owner = this;
    }

    public void workerEntered(Creature worker) {
        assert worker.container == null;
        this.worker = worker;
        worker.container = this;
    }

    public void workerLeft() {
        assert worker.container == this;
        worker.container = null;
        worker = null;
    }

    /**
     * @param passmap     Карта проходимости здания (true --- можно пройти)
     * @param components  Предметы, используемые при строительстве здания (блоки, детали, и т.п.)
     * @param entranceDxy Сдвиг (в координатной сетке здания) входа
     */
    public Workshop(int width, int height, boolean[] passmap, Item[] components, int entranceDxy) {
        super(width, height, passmap, components);
        this.entranceDxy = entranceDxy;
    }


    public int getEntranceXY() {
        return getXY() + World.WORLD_WIDTH * (entranceDxy / width) + (entranceDxy % width);
    }
}
